package com.strong.faker;

import cn.hutool.core.lang.Assert;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * 模拟数据生成 基础类
 *
 * @author simen
 * @date 2023/04/07
 */
@Slf4j
public abstract class BaseFaker<M> {

    /**
     * 返回随机单条记录
     *
     * @return {@link M}
     */
    public M single() {
        initialize();
        return getModel();
    }

    /**
     * 返回intNumber数量的随机记录队列
     *
     * @param intNumber 返回记录数量
     * @return {@link List}<{@link M}>
     */
    public List<M> list(int intNumber) {
        Assert.notNull(intNumber);
        Assert.isTrue(intNumber > 0);

        initialize();
        List<M> list = new ArrayList<>();
        for (int i = 0; i < intNumber; i++) {
            list.add(getModel());
        }
        return list;
    }

    /**
     * 初始化参数的方法
     */
    protected abstract void initialize();

    /**
     * 获取随机单条记录
     *
     * @return {@link M}
     */
    protected abstract M getModel();
}
